#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h> //write 的头文件


#define LOG "log.txt" //日志文件
#define SIZE 1024

int main()
{
  int fd = open("test.c", O_RDONLY);
  if(fd == -1)
  {
    perror("open file fail1");
    exit(-1);
  }

  int n = 50; //读取50个字符
  char buffer[SIZE];
  int pos = 0;
  while(n--)
  {
    read(fd, (char*)buffer + pos, 1);
    pos++;
  }

  printf("%s\n", buffer);

  close(fd);
  return 0;
}

// int main()
// {
//   //三种参数组合，就构成了 fopen 中的 w
//   int fd = open(LOG, O_WRONLY | O_CREAT | O_TRUNC, 0666);
//   if(fd == -1)
//   {
//     perror("open file fail1");
//     exit(-1);
//   }

//   const char* ps = "Hello System Call!\n";
//   int cnt = 5;
//   while(cnt--)
//     write(fd, ps, strlen(ps));  //不能将 '\0' 写入文件中

//   close(fd);
//   return 0;
// }

// #define ONE 0x1
// #define TWO 0x2
// #define THREE 0x4

// void Test(int flags)
// {
//   //模拟实现三种选项传递
//   if(flags & ONE)
//     printf("This is one\n");

//   if(flags & TWO)
//     printf("This is two\n");

//   if(flags & THREE)
//     printf("This is three\n");
// }

// int main()
// {
//   Test(ONE | TWO | THREE);
//   printf("-----------------------------------\n");
//   Test(ONE);  //位图使得选项传递更加灵活
//   return 0;
// }

// int main()
// {
//   char s[] = "2023:3:24";
//   int arr[3];
//   char* buffer[4];
//   sscanf(s, "%d:%d:%d", arr, arr + 1, arr + 2);
//   printf("%d\n%d\n%d\n", arr[0], arr[1], arr[2]);

//   return 0;
// }

// int main()
// {
//   FILE* fp = fopen(LOG, "w");
//   if(!fp)
//   {
//     perror("fopen file fail!"); //报错
//     exit(-1); //终止进程
//   }

//   char buffer[SIZE];  //缓冲区
//   int cnt = 5;
//   while(cnt--)
//   {
//     snprintf(buffer, SIZE, "%s\n", "Hello File!");  //写入数据至缓冲区
//     fputs(buffer, fp);  //将缓冲区中的内容写入文件中
//   }

//   fclose(fp);
//   fp = NULL;
//   return 0;
// }

// int main()
// {
//   //打开文件进行操作
//   //在当前目录中打开文件 log.txt
//   //注意：同一个文件，可以同时多次打开
//   FILE* fp1 = fopen("log.txt", "w");
//   FILE* fp2 = fopen("log.txt", "a");
//   FILE* fp3 = fopen("log.txt", "r");

//   FILE* fp4 = fopen("log.txt", "w+");
//   FILE* fp5 = fopen("log.txt", "a+");
//   FILE* fp6 = fopen("log.txt", "r+");


//   char buffer[SIZE];
//   snprintf(buffer, SIZE, "%s\n", "Hello File!");
//   //fputs(buffer, fp1);
//   fclose(fp1);
//   fclose(fp2);
//   fclose(fp3);

//   fclose(fp4);
//   fclose(fp5);
//   fclose(fp6);

//   return 0;
// }
